iT邦幫忙

2023 iThome 鐵人賽

DAY 18
0
自我挑戰組

Python Discord Bot(DC機器人)系列 第 18

Python Discord Bot#18 - 做中學-會員簽到(一)

  • 分享至 

  • xImage
  •  

前言

前面的篇章都挺零碎的,
但基本的,其實就是需要看懂文件內容,
而在網路汪洋,也存在許多的套件可以使用,
值得自己去尋找,
接下來的篇章會在做中時發掘出更多的想法。

簽到功能

內容

使用 command 或是 "/"(slash_command)讓成員主動觸發命令,
並連接到google sheet 存取目標內容:

  1. 會員ID
  2. 時間
  3. 成員暱稱

試算表

將建立好的目標試算表,新增工作表並改名而本篇改為"簽到",並將欄位先取好名。
https://ithelp.ithome.com.tw/upload/images/20230918/20106071zpfpCoflwY.png

套件使用

import discord
import moment

# 此為自己編寫的內容,在第12、13篇有教學與範例code
from src.googleSheet import add_row_sheet 

編寫內容

宣告check_in_data 輸入member內容,並取得id、dispay_name,
與使用moment 取得 當下的時間並format 成 "2023-09-18 00:00:00"的格式。
自動在指定的Google試算表中,名為「簽到」的工作表加入表格。

並使用python try except 處理,
try 裡面內容成功時,會成功執行到最後 return 的部分,
except 則是在中途有錯誤時,會回傳 return 內容。

def main(Bot):
    name = "簽到"
    print(f"{name} 註冊成功")

    
    def check_in_data(member):
      try:
        add_row_sheet("簽到", [
          str(member.id),
          moment.now().format("YYYY-MM-DD HH:mm:ss"),
          member.display_name
        ])
        return "簽到成功"
      except:
        return "簽到失敗,請通知管理員處理"
    

宣告 command、slash_command

一樣在 def main()中,宣告命令的內容
分別command 觸發方式 「$簽到」與 slash_command 觸發方式 「/簽到」

    # 會員功能
    @Bot.command(name=name)
    async def check_in_form_command(ctx):
      await ctx.send(check_in_data(ctx.author))
    
    @Bot.slash_command(name=name, description="成員簽到")
    async def check_in_from_slash_command(ctx):
      await ctx.respond(check_in_data(ctx.author))

結果

成功:
https://ithelp.ithome.com.tw/upload/images/20230918/20106071gla4OJTAgZ.png
失敗:
https://ithelp.ithome.com.tw/upload/images/20230918/20106071xKIASoAqP1.png

https://ithelp.ithome.com.tw/upload/images/20230918/20106071ShZ0hiopGw.png


上一篇
Python Discord Bot#17 - Replit介紹
下一篇
Python Discord Bot#19 - 做中學-會員簽到(二) - 進階題
系列文
Python Discord Bot(DC機器人)31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言